/*
 * Copyright 2021 The Backstage Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { escapeRegExp } from './escapeRegExp';

describe('escapeRegExp', () => {
  test('does not escape non-regex characters', () => {
    expect(escapeRegExp('Backstage Backstage')).toBe('Backstage Backstage');
  });

  test('all the characters', () => {
    expect(escapeRegExp('^$\\.*+?()[]{}|')).toBe(
      '\\^\\$\\\\\\.\\*\\+\\?\\(\\)\\[\\]\\{\\}\\|',
    );
  });

  test('character: ^', () => {
    expect(escapeRegExp('^')).toBe('\\^');
  });

  test('character: $', () => {
    expect(escapeRegExp('$')).toBe('\\$');
  });

  test('character: \\', () => {
    expect(escapeRegExp('\\')).toBe('\\\\');
  });

  test('character: .', () => {
    expect(escapeRegExp('.')).toBe('\\.');
  });

  test('character: *', () => {
    expect(escapeRegExp('*')).toBe('\\*');
  });

  test('character: +', () => {
    expect(escapeRegExp('+')).toBe('\\+');
  });

  test('character: ?', () => {
    expect(escapeRegExp('?')).toBe('\\?');
  });

  test('character: (', () => {
    expect(escapeRegExp('(')).toBe('\\(');
  });

  test('character: )', () => {
    expect(escapeRegExp(')')).toBe('\\)');
  });

  test('character: [', () => {
    expect(escapeRegExp('[')).toBe('\\[');
  });

  test('character: ]', () => {
    expect(escapeRegExp(']')).toBe('\\]');
  });

  test('character: {', () => {
    expect(escapeRegExp('{')).toBe('\\{');
  });

  test('character: }', () => {
    expect(escapeRegExp('}')).toBe('\\}');
  });

  test('character: |', () => {
    expect(escapeRegExp('|')).toBe('\\|');
  });
});
